package com.baomidou.mybatisplus;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.domain.User;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.mapper.UserMapper;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import java.io.Serializable;
import java.util.*;

/**
 * @Author: 曾睿
 * @Date: 2020/9/16 15:31
 */
@RunWith(SpringRunner.class)
@SpringBootTest
public class Get {

    @Autowired
    private UserMapper userMapper;

    public static void print(List<User> list) {
        for (User user : list) {
            System.out.println(user);
        }
    }

    /**
     * 自定义xml文件
     * 注意，自己写的查询无法使用逻辑删除等
     */
    @Test
    public void query11() {
        List<User> byId = userMapper.getAllByXml();
        System.out.println(byId);
    }

    /**
     * 根据id查询
     */
    @Test
    public void query1() {
        User byId = userMapper.selectById(1);
        System.out.println(byId);
    }

    /**
     * 根据idList查询
     */
    @Test
    public void query2() {
        Collection<Serializable> idList = new ArrayList<>();
        idList.add(1);
        idList.add(2);
        List<User> list = userMapper.selectBatchIds(idList);
        print(list);
    }

    /**
     * 根据条件查询
     */
    @Test
    public void query3() {
        Map<String, Object> columnMap = new HashMap<>();
        columnMap.put("name", "大明明");
        columnMap.put("address", "武汉");
        List<User> list = userMapper.selectByMap(columnMap);
        print(list);
    }

    /**
     * 查询个数
     */
    @Test
    public void query4() {
        String name = "zs";
//        Integer count = userMapper.selectCount(null);

        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.like(name != null, "name", name);

        // 等于
//		queryWrapper.ge(判断后面参数是否添加, , );
//        Integer selectCount = userMapper.selectCount(queryWrapper);
//        System.out.println(selectCount);

        // 使用lambda查询
        LambdaQueryWrapper<User> lambdaQ = Wrappers.lambdaQuery();
        lambdaQ.like(User::getName, "字母")
                .lt(User::getAge, 18);

        List<User> list = userMapper.selectList(lambdaQ);
    }

    /**
     * 分页查询
     */
    @Test
    public void query5() {

        // 分页条件（可以传一个null表示没有额外条件）
        Page<User> page = new Page<>(1, 3);

        // 不进行 count sql 优化，解决 MP 无法自动优化 SQL 问题，这时候你需要自己查询 count 部分
//         page.setOptimizeCountSql(false);// 是否进行sql的count优化
        page.setSearchCount(false);
        // 当 total 为小于 0 或者设置 setSearchCount(false) 分页插件不会进行 count 查询
        // 要点!! 分页返回的对象与传入的对象是同一个
        userMapper.selectPage(page, null);

        // 直接对原page进行赋值
        // 传入的条件
        // 当前页，默认 1
        long current = page.getCurrent();
        // 一页页数
        long size = page.getSize();

        // ################## 返回条件 ##################
        // 总条数
        long total = page.getTotal();
        // 共多少页
        long pages = page.getPages();
        // 查询内容
        List<User> list = page.getRecords();

        // 传入的条件
        System.out.println("当前页:" + current);
        System.out.println("一页页数:" + size);

        // 返回条件
        System.out.println("总条数:" + total);
        System.out.println("共多少页:" + pages);
        print(list);
    }

}
